package executor;

import com.lowagie.text.DocumentException;
import calculator.GeneraReport;
import calculator.GeneraReportCibi;
import boundary.Home;
import store.Cibo;
import store.TutteRicette;
import store.TuttiCibi;
import store.TuttiMenu;
import dataview.Cibi;
import dataview.CriterioRicerca;
import dataview.FormatoReport;
import dataview.Report;
import dataview.TipoReportCibi;
import exceptions.DBException;
import exceptions.ElementoNonPresente;

public class GestireCibi {
	
	public Home home;
	public Main main;
	public Cibo cibo;
	private boolean in_eliminazione = false;
	
	private Cibi ultimiCercati;
	
	public GestireCibi(Main main, Home home) {
		this.main = main;
		this.home = home;
		try {
			ultimiCercati = TuttiCibi.getTuttiCibi().ultimiCercati();
		} catch (DBException e) {
			e.printStackTrace();
		}
		home.creaAccedereCibi(this, ultimiCercati);
	}
	
	public void inserireCibo(String nCibo) throws DBException {
		if (!TuttiCibi.getTuttiCibi().presente(nCibo)) {
			home.fatto();
		} else home.fallito();
	}
	
	public void eliminareCibo(Cibo cibo) {
		in_eliminazione = true;
		try {
			if (TutteRicette.getTutteRicette().usatoCibo(cibo) || TuttiMenu.getTuttiMenu().usatoCibo(cibo)) {
				in_eliminazione = false;
				home.ko();
			} else {
				this.cibo = cibo;
				home.ok();
			}
		} catch (DBException e) {
			e.printStackTrace();
			in_eliminazione = false;
			home.ko();
		}
	}
	
	public void fareReport(Cibi cibi, TipoReportCibi tipo, FormatoReport formato, String path) throws DocumentException {
		Report r = GeneraReportCibi.generaReportCibi(cibi, tipo);
		GeneraReport.generaFile(r, formato, path);
	}
	
	public void annulla() {
		if (in_eliminazione) in_eliminazione = false;
	}
	
	public void conferma() throws DBException, ElementoNonPresente {
		if (in_eliminazione) {
			in_eliminazione = false;
			TuttiCibi.getTuttiCibi().elimina(cibo);
		}
	}
	
	public void ricercare(CriterioRicerca critRic) throws DBException {
		Cibi ricercati = TuttiCibi.getTuttiCibi().ricerca(critRic);
		home.passaCibi(ricercati);
	}
	
}
